#pragma once

/* 一些额外配置 */


#ifdef __unix__
    #ifndef _GNU_SOURCE
        #define _GNU_SOURCE
    #endif
#endif

/* asm语法糖 */
#ifndef __GNUC__
    #define __asm__ asm
#endif

/* cpp补丁 */
#ifdef __cplusplus 
    #define _Bool                                       bool
    #define _Static_assert                              static_assert
    /* C++没有这个函数 */
    #define __builtin_types_compatible_p(a, b)          1
#endif

/* mac补丁 */
#ifdef __APPLE__
    #ifdef __arm64__
        #ifdef __amd64__
        #warning "rosseta enabled"
        #endif
        #undef __amd64__
        #ifndef __aarch64__
            #define __aarch64__
        #endif
        // #warning "disable rosseta"
    #endif
#endif

// /* c11 兼容 */
// #define typeof						__type_of__

/* MSVC */
#ifdef _MSC_VER
	#define __amd64__
	#define __UINT64_TYPE__		unsigned long long
	#define __INT64_TYPE__		long long
	#define __UINTPTR_TYPE__	unsigned long long
	#define __SIZE_TYPE__		unsigned long long
#endif

/* mingw补丁 */
#ifdef __MINGW32__
	#define aligned_alloc(align, size)  _aligned_malloc(size, align)
#endif

#ifndef __STDC_HOSTED__
	#warning "this is a bare metal environment"
#endif




